//
//  WBUserAccount.swift
//  传智微博
//
//  Created by wong on 17/1/9.
//  Copyright © 2017年 Canis. All rights reserved.
//

import UIKit

private let accountFile:NSString = "useraccount.json"

/// 用户账号信息
class WBUserAccount: NSObject {
    
    //访问令牌
    var access_token:String?
    
    //用户代号
    var uid : String?
    
    //access_token的生命周期，单位是秒
    //过期日期
    //开发者5年，每次登录之后，都是五年
    //使用者3天，会从第一次登录递减
    var expires_in : TimeInterval = 0{
        didSet{
            expiresDate = Date(timeIntervalSinceNow: expires_in)
        }
    }
    
    ///过期日期
    var expiresDate:Date?
    
    //用户昵称
    var screen_name:String?
    
    //用户头像地址（大图），180×180像素
    var avatar_large:String?
    
    override var description: String{
        return yy_modelDescription()
    }
    
    override init() {
        super.init()
        //从磁盘加载保存的文件  -> 字典
        // 1> 加载磁盘文件到二进制数据，如果失败直接返回
        guard let path = accountFile.cz_appendDocumentDir(),
        let data = NSData(contentsOfFile: path),
        let dict = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String:AnyObject]
            else{
                return
        }
        // 2> 使用字典设置属性
        /**
        用户是否登录关键代码
        **/
        //yy_modelSet(with: dict ?? [:])
        
        print("从沙盒获取用户信息 \(self)")

        //使用字典设置属性值
        
        // 3> 判断 Token 是否过期
        //测试过期日期 - 开发中，每一个分支都需要测试
        //expiresDate = Date(timeIntervalSinceNow: -3600 * 24)
        
        if expiresDate?.compare(Date()) != .orderedDescending{
            print("账户过期")
            //清空 Token
            access_token = nil
            uid = nil
            //删除账户文件
            _ = try? FileManager.default.removeItem(atPath: path)
        }
        else{
            print("账户正常 \(self)")
        }
    }
    
    
    /**
     数据存储方式
     1.偏好设置(小)
     2.沙盒 - 归档/plist/json
     3.数据库(FMDB/CoreData)
     4.钥匙串访问（小/自动加密 - 需要使用框架 SSKeychain）
    **/
    func saveAccount(){
        //1.模型转字典
        
        var dict = (self.yy_modelToJSONObject()  as? [String:AnyObject]) ?? [:]
        //需要删除expires_in
        dict.removeValue(forKey: "expires_in")
        
        //2.字典序列化 data
        guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []),
            let filePath = accountFile.cz_appendDocumentDir()//3.写入磁盘
            else{
                return
        }
        
        (data as NSData).write(toFile: filePath, atomically: true)
        
        print("用户账户保存成功 \(filePath)")
    }
}
